# a.myachin
# тут описывается класс по вычислению фреймов на дисплее
# при определенной раскладе, считанную из cfg-файла
import sys
import os
import glob
import frame
import xml.etree.ElementTree as etree
from PyQt4 import QtGui

class layouts:
	def __init__(self, uuid, nameFile):
		self.app 		= QtGui.QApplication(sys.argv)
		self.uuid		= uuid
		self.nameFile	= nameFile
		self.tagName	= "Layout"
		self.tagsOfFrame= self.__parseCfgFile()
		self.count		= len(self.tagsOfFrame)
		self.frames 	= []
		self.__parseOfFrames()
	######## end __init__ #################

	def __searchCamerasName(self, root):
		for camera in root.findall('CameraManager.NeyroMpx'):
			for cam in camera.findall('Camera'):
				for i in range(len(self.sources)):
					if (not self.sources[i]['UUID'].find(cam.attrib['UUID'])):
						self.sources[i]['Name'] = "NeyroMpx"

		for camera in root.findall('CameraManager.NeyroD1'):
			for cam in camera.findall('Camera'):
				for i in range(len(self.sources)):
					if (not self.sources[i]['UUID'].find(cam.attrib['UUID'])):
						self.sources[i]['Name'] = "NeyroD1"
	########### end __searchCamerasName ############333

	def __parseCfgFile(self):
		# считываем все строки с cfg-файла
		tree = etree.parse(self.nameFile)
		root = tree.getroot()

		for layout in root.findall(self.tagName):
			attrib = layout.attrib
			if (not attrib['UUID'].find(self.uuid)):
				self.currentLayout = layout

		# считывание фреймов
		frames = []
		sources = []
		index = 0
		for frame in self.currentLayout.findall('Frame'):
			attrib = frame.attrib
			frames.append(attrib)
			
			frameTag = frame.findall('Source')
			if len(frameTag) != 0:
				data = {}
				buff = frameTag[0].attrib['UUID']
				data['UUID'] = buff.replace('0100', '0000')
				data['index'] = index
				data['Name'] = ""
				sources.append(data)
			index += 1

		self.sources = sources
		self.__searchCamerasName(root)

		# выводи список строк с фреймами
		return(frames)
	######### end parseCfgFile ###############

	# разбивание тегов <Frame> на части и изъятие из
	# них атрибутов для построения фреймов
	#
	# Все параметры сохраняются в списках left, top, height, width
	def __parseOfFrames(self):
		demw, demh = self.__screenDementions()

		for index in range(self.count):
			attribs = self.tagsOfFrame[index]
			left	= int(attribs['LEFT'])
			top		= int(attribs['TOP'])
			width	= int(attribs['WIDTH'])
			height	= int(attribs['HEIGHT'])
			fr = frame.frame(left, top, width, height, demw, demh)
			for i in range(len(self.sources)):
				if (index == self.sources[i]['index'] and len(self.sources[i]['Name']) != 0):
					fr.setCamera(self.sources[i]['Name'])
			self.frames.append(fr)
	############ end __parseOfFrames ##############

	# Метод возвращает разрешение экрана
	def __screenDementions(self):
		primScreen = self.app.desktop().primaryScreen()
		d_size = self.app.desktop().screenGeometry(primScreen).size()
		return(d_size.width(), d_size.height())
	######## end __screenDementions ##################

	def getframes(self):
		return(self.frames)
	########### end getframes #######################

########## end class layouts ####################